package cn.jr.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.regex.Pattern;
@SuppressWarnings("all")
public class TimeInputExample {
    private static Scanner scanner = new Scanner(System.in);
    // 正则表达式：验证yyyy-MM-dd格式
    private static final String DATE_PATTERN = "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$";
    // 日期格式化器
    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    public static void main(String[] args) {
        // 获取有效的开始时间
        String time1 = getValidDateInput("请输入开始时间（年-月-日）");
        // 获取有效的结束时间
        String time2 = getValidDateInput("请输入结束时间（年-月-日）");

        System.out.println("输入的开始时间：" + time1);
        System.out.println("输入的结束时间：" + time2);
    }

    /**
     * 获取符合格式的日期输入
     * @param prompt 提示信息
     * @return 有效的日期字符串（yyyy-MM-dd）
     */
    public static String getValidDateInput(String prompt) {
        String input;
        while (true) {
            System.out.print(prompt + "：");
            input = scanner.nextLine().trim(); // 去除首尾空格

            // 1. 正则表达式初步校验格式
            if (!Pattern.matches(DATE_PATTERN, input)) {
                System.out.println("格式错误！请使用正确格式：年-月-日（例如：2023-12-31）");
                continue;
            }

            // 2. 日期解析校验（避免如"2023-02-30"这种逻辑错误的日期）
            try {
                // 设置严格解析模式（避免自动转换无效日期，如2023-02-30转为2023-03-02）
                sdf.setLenient(false);
                sdf.parse(input); // 解析成功则格式和逻辑均有效
                break; // 验证通过，退出循环
            } catch (ParseException e) {
                System.out.println("日期无效！请输入合理的日期（例如：2023-02-28）");
            }
        }
        return input;
    }
}